import { Result } from '@/request/Result'
import { post, get } from '@/request/http'
import type { LoginRequest } from '@/api/type/dada'
import type { Ref } from 'vue'

/**
 * 用户登录函数
 *
 * 该函数用于处理用户登录请求，通过发送POST请求到指定的登录接口，并返回登录结果。
 *
 * @param {LoginRequest} request - 登录请求参数，包含用户登录所需的信息，如用户名、密码等。
 * @param {Ref<boolean>} [loading] - 可选的加载状态引用，用于在请求过程中控制加载状态的显示。
 *
 * @returns {Promise<Result<string>>} - 返回一个Promise，解析为登录结果。Result<string>包含登录成功后的令牌或错误信息。
 */
const login: (
    request: LoginRequest,
    loading?: Ref<boolean>
  ) => Promise<Result<any>> = (request, loading) => {
    return post('/oauth/anyTenant/login', { ...request  }, undefined, loading)
}


/**
 * 执行用户登出操作。
 * 该函数通过发送POST请求到指定的登出接口，以结束当前用户的会话。
 *
 * @returns {Promise<Result<any>>} 返回一个Promise对象，该对象解析为登出操作的结果。
 *                                 Result<any>表示登出操作返回的结果，具体类型取决于后端接口的返回结构。
 */
const logout: () => Promise<Result<any>> = () => {
  return post('/oauth/anyUser/logout',)
}


/**
 * 获取用户信息
 *
 * 该函数通过调用 `/oauth/anyone/getUserInfoById` 接口获取当前用户的信息。
 *
 * @param {Ref<boolean>} [loading] - 可选参数，用于控制加载状态的引用。如果提供，函数会在请求开始时将 `loading` 设置为 `true`，请求结束后设置为 `false`。
 * @returns {Promise<Result<any>>} - 返回一个 Promise，解析为包含用户信息的结果对象。结果对象的类型为 `Result<any>`，其中 `any` 表示用户信息的具体数据结构。
 */
const getUserInfo: (
  loading?: Ref<boolean>
) => Promise<Result<any>> = ( loading) => {
  return get('/oauth/anyone/getUserInfoById', undefined, loading)
}


/**
 * 获取租户信息
 *
 * 该函数通过调用 `/oauth/anyone/findCompanyDept` 接口获取当前租户的信息。
 *
 * @returns {Promise<Result<any>>} - 返回一个 Promise，解析为包含用户信息的结果对象。结果对象的类型为 `Result<any>`，其中 `any` 表示用户信息的具体数据结构。
 * @param tenantId
 */
const findCompanyDept: (
  tenantId?: string
) => Promise<Result<any>> = ( tenantId) => {
  return get('/oauth/anyone/findCompanyDept', { tenantId })
}

export default {
    login,
    logout,
    getUserInfo,
    findCompanyDept,
}
